home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / AMAZE.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  2.1 KB  |  106 lines

  1. 10  ' ***************************
  2. 20  ' **         AMAZE         **
  3. 30  ' ***************************
  4. 40  '
  5. 50  CLEAR
  6. 60  SCREEN 1
  7. 70  CLS
  8. 80  KEY OFF
  9. 90  COLOR 0,1
  10. 100  LOCATE 12,12
  11. 110  PRINT "***  AMAZE  ***"
  12. 120  GOSUB 760
  13. 130  CLS
  14. 140  LOCATE 7,1
  15. 150  INPUT "How many paths wide ";WIDE
  16. 160  IF WIDE > 0 AND WIDE < 160 THEN 200
  17. 170  PRINT "Valid range is 1 to 159
  18. 180  BEEP
  19. 190  GOTO 150
  20. 200  INPUT "How many paths high ";HIGH
  21. 210  IF HIGH > 0 AND HIGH < 100 THEN 260
  22. 220  PRINT "Valid range is 1 to 99
  23. 230  BEEP
  24. 240  GOTO 200
  25. 250  '
  26. 260  WINC = 320\(WIDE+1)
  27. 270  HINC = 200\(HIGH+1)
  28. 280  CLS
  29. 290  LINE (0,0)-(WIDE*WINC,HIGH*HINC),,B
  30. 300  COUNT = WIDE * HIGH
  31. 310  FOR I = 0 TO COUNT
  32. 320  PTR = (PTR+997) MOD COUNT
  33. 330  X = INT(PTR/HIGH)
  34. 340  Y = PTR - X * HIGH
  35. 350  X = X * WINC
  36. 360  Y = Y * HINC
  37. 370  IF POINT(X,Y) THEN 600
  38. 380  DIR = INT(4*RND+1)
  39. 390  DIR2 = DIR
  40. 400  DIR = DIR MOD 4 + 1
  41. 410  XN = ((DIR=1)-(DIR=3)) * WINC + X
  42. 420  YN = ((DIR=2)-(DIR=4)) * HINC + Y
  43. 430  IF POINT(XN,YN) = 0 THEN 550
  44. 440  LINE (X,Y)-(XN,YN)
  45. 450  DIR = INT(4*RND+1)
  46. 460  FOR K = 1 TO 4
  47. 470  DIR = DIR MOD 4 + 1
  48. 480  XN = ((DIR=1)-(DIR=3)) * WINC + X
  49. 490  YN = ((DIR=2)-(DIR=4)) * HINC + Y
  50. 500  IF POINT(XN,YN) THEN 590
  51. 510  LINE (X,Y)-(XN,YN)
  52. 520  X = XN
  53. 530  Y = YN
  54. 540  GOTO 450
  55. 550  IF DIR <> DIR2 THEN 580
  56. 560  X = XN
  57. 570  Y = YN
  58. 580  GOTO 400
  59. 590  NEXT K
  60. 600  NEXT I
  61. 610  '
  62. 620  ' Open the doors on each side
  63. 630  Y = (HIGH \ 2) * HINC
  64. 640  LINE (0,Y)-(0,Y+HINC),0
  65. 650  LINE (WIDE*WINC,Y)-(WIDE*WINC,Y+HINC),0
  66. 660  '
  67. 670  ' Done ...
  68. 680  ' If user presses "p" then dump graphics to printer,
  69. 690  ' Else draw another maze whenever any key is pressed.
  70. 700  K$ = INKEY$
  71. 710  IF K$ = "" THEN 700
  72. 720  IF K$ = "p" OR K$ = "P" THEN GOSUB 870
  73. 730  GOTO 130
  74. 740  '
  75. 750  ' Wait for user and be randomizing the generator
  76. 760  LOCATE 25,9
  77. 770  PRINT "Press any key to begin";
  78. 780  RNDM = RND
  79. 790  K$ = INKEY$
  80. 800  IF K$ = "" THEN 780
  81. 810  RANDOMIZE 64000 * RND - 32000
  82. 820  LOCATE 25,1
  83. 830  PRINT SPACE$(39);
  84. 840  RETURN
  85. 850  '
  86. 860  ' Subroutine to dump graphic maze to printer
  87. 870  DEF SEG = &HB800
  88. 880  E$ = CHR$(27)
  89. 890  WIDTH "LPT1:",255
  90. 900  LPRINT E$+"1";
  91. 910  LPRINT E$+"W" + CHR$(1);
  92. 920  FOR ROW = 0 TO 79
  93. 930  A$ = ""
  94. 940  FOR COL = 99 TO 0 STEP -1
  95. 950  LOCA$ = CHR$(PEEK(COL * 80 + ROW))
  96. 960  LOCB$ = CHR$(PEEK(COL * 80 + ROW + &H2000))
  97. 970  A$ = A$ + LOCB$ + LOCB$
  98. 980  A$ = A$ + LOCA$ + LOCA$
  99. 990  IF COL <> 49 THEN 1020
  100. 1000  LPRINT E$+"K"+CHR$(144)+CHR$(1)+A$;
  101. 1010  A$ = ""
  102. 1020  NEXT COL
  103. 1030  LPRINT A$
  104. 1040  NEXT ROW
  105. 1050  RETURN
  106.